package com.course.chapter3;

/**
 * 枚举类型单例改进
 1.线程安全性  yes
 2.性能       yes
 3.懒加载     yes
 * @ClassName: com.course.chapter3.EnumSingleton.java
 * @author: songxulin
 * @date :  2020-06-30 19:01
 * @version V1.0
 */
public class EnumSingletonDemo {
    private EnumSingletonDemo(){
    }

    private  enum  Holder{
        INSTANCE;
        private  EnumSingletonDemo instance ;
        Holder(){
            //实例化的时候调用
            System.out.println("Holder instance");
            instance = new EnumSingletonDemo();
        }
        private EnumSingletonDemo getInstance(){
            return instance;
        }
    }

    public static  EnumSingletonDemo getInstance(){
        //加载一个类时，其内部类不会同时被加载。一个类被加载，当且仅当其某个静态成员（静态域、构造器、静态方法等）被调用时发生。
        //静态内部类，在掉用的时候会实例化
        return Holder.INSTANCE.instance;
    }

    public static void main(String[] args) {
        getInstance();
    }
}
